268. Missing Number
Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missing from the array.
For example, Given nums = [0, 1, 3] return 2.
Note: Your algorithm should run in linear runtime complexity. Could you implement it using only constant extra space complexity?
大意就是在{0, 1, 2, ..., n}找出遗失的数字,如果没有遗失return n+1;
//二分搜索
public int missingNumber(int[] nums) {
Arrays.sort(nums);
int min = 0, max = nums.length - 1;
while(min < max){
int mid = (min + max) / 2;
// 没错位,在右边;有错位,则在左边
if(mid == nums[mid]){
min = mid + 1;
} else {
max = mid - 1;
}
}
// 如果没有错位,则返回最后一个数加1
return nums[min] == min ? min + 1 : min;
}
/*
异或运算:a^b^b=a;异或两次相同数字b,将得到原来数字a
运算法则:1^1=0; 1^0=1; 0^0=0;(异或是二进制运算符)
eg:2^3 =2(十进制) -> 10^11 = 1 (二进制)
*/
public int missingNumber(int[] nums) {
int xor = 0, i = 0;
for (i = 0; i < nums.length; i++) {
xor ^= i ^ nums[i];
}
return xor ^ i;
}
//other
public static int missingNumber(int[] nums) {
int sum = nums.length;
for (int i = 0; i < nums.length; i++)
sum += i - nums[i];
return sum;
}